#pragma once
#include "BaseClass.h"

namespace System
{

/*******************************************************/
class Exception : public XObject
{
protected:
	MemStringPtr m_Message;
	Exception* m_InnerException;

public:
	Exception();
	Exception(TCHAR* message);
	Exception(MemStringPtr message);
	Exception(const Exception& exception);
	Exception(TCHAR* message, Exception& innerException);

	virtual ~Exception();

public:
	const MemString* GetMessage() const;
	const Exception* GetInnerException() const;

public:
	VIRTUAL_GET_TYPE();
	VIRTUAL_TOSTRING();
};

DEFINE_CLASS_TYPE(System_Exception, _T("System.Exception"));

/*******************************************************/
class NotImplementedException : public Exception
{

public:
	NotImplementedException();
	NotImplementedException(TCHAR* message);
	NotImplementedException(MemStringPtr message);
	NotImplementedException(const Exception& exception);
	NotImplementedException(TCHAR* message, Exception& innerException);

	virtual ~NotImplementedException();

public:
	VIRTUAL_GET_TYPE();
};

DEFINE_CLASS_TYPE(System_NotImplementedException, _T("System.NotImplementedException"));


}// end namespace